-- -*- coding: utf-8 -*-
-- 常量定义模块
-- 包含游戏中所有的枚举类型、配置数据和工具函数

local const = {}

-- 常量定义
const.ROUND_LIMIT = 200            -- 回合数上限
const.COMMAND_FAIL_LIMIT = 50     -- 命令失败次数上限
const.INIT_RMB = 200              -- 玩家初始经济
const.SPLASH_DAMAGE_RATIO = 0.5  -- 溅射伤害比例

-- 枚举定义
const.UnitType = {
    soldier = 0,  -- 士兵
    collect = 1,  -- 采集兵
    doctor = 2,   -- 治疗兵
    archer = 3,   -- 弓箭手
    worker = 4    -- 建造兵
}

const.TildeType = {
    flat = 0,     -- 平地
    hill = 1,     -- 山丘
    river = 2,    -- 河流
    gold = 11,    -- 黄金矿
    energy = 12,  -- 能源矿
    wood = 13,    -- 木材
    stone = 14    -- 石材
}

const.BuildingType = {
    base = 0,   -- 基地
    tower = 1,  -- 防御塔
    wall = 2    -- 城墙
}

const.EntityType = {
    unit = 0,     -- 单位
    building = 1, -- 建筑
    terrain = 2   -- 地形
}

const.DirectionType = {
    up = {0, -1},     -- 向上
    down = {0, 1},    -- 向下
    left = {-1, 0},   -- 向左
    right = {1, 0}    -- 向右
}

const.CommandType = {
    init = "init",       -- 初始化战场
    ["end"] = "end",         -- 结束
    move = "move",       -- 移动
    attack = "attack",   -- 攻击
    build = "build",     -- 建造
    swap = "swap",       -- 生产
    heal = "heal",       -- 治疗
    collect = "collect"  -- 采集
}

const.PlayerType = {
    PLAYER1 = "player1",  -- 玩家1
    PLAYER2 = "player2",  -- 玩家2
    ADMIN = "admin"       -- 管理员
}

-- 单位配置
const.UNIT_CONFIG = {
    [const.UnitType.soldier] = {
        name = "士兵", -- 名字
        attack = 30, -- 攻击力
        speed = 1, -- 移动速度
        hp = 80, -- 初始血量
        attackRange = 1, -- 攻击范围
        cost = 25, -- 生产成本
        killedAward = 15, -- 被击杀奖励
        icon = "⚔️", -- 文本小图标
    },
    [const.UnitType.collect] = {
        name = "采集兵", -- 名字
        attack = 1, -- 采集数量
        speed = 1, -- 移动速度
        hp = 40, -- 初始血量
        attackRange = 1, -- 采集范围
        cost = 15, -- 生产成本
        killedAward = 15, -- 被击杀奖励
        icon = "⛏️", -- 文本小图标
    },
    [const.UnitType.doctor] = {
        name = "治疗兵", -- 名字
        attack = 10, -- 治疗量
        speed = 1, -- 移动速度
        hp = 50, -- 初始血量
        attackRange = 1, -- 治疗范围
        cost = 20, -- 生产成本
        killedAward = 12, -- 被击杀奖励
        icon = "💊", -- 文本小图标
    },
    [const.UnitType.archer] = {
        name = "弓箭手", -- 名字
        attack = 20, -- 攻击力
        speed = 1, -- 移动速度
        hp = 40, -- 初始血量
        attackRange = 3, -- 攻击范围
        cost = 30, -- 生产成本
        killedAward = 18, -- 被击杀奖励
        icon = "🏹", -- 文本小图标
    },
    [const.UnitType.worker] = {
        name = "建造兵", -- 名字
        attack = 1, -- 建筑数量
        speed = 1, -- 移动速度
        hp = 50, -- 初始血量
        attackRange = 1, -- 建造范围
        cost = 30, -- 生产成本
        killedAward = 18, -- 被击杀奖励
        icon = "🪓", -- 文本小图标
    },
}

-- 资源配置
const.RESOURCE_CONFIG = {
    [const.TildeType.energy] = {
        name = "能源", -- 名字
        value = 3, -- 价值
        icon = "⚡", -- 文本小图标
    },
    [const.TildeType.wood] = {
        name = "木材", -- 名字
        value = 2, -- 价值
        icon = "🌲", -- 文本小图标
    },
    [const.TildeType.stone] = {
        name = "石材", -- 名字
        value = 2, -- 价值
        icon = "🧱", -- 文本小图标
    },
    [const.TildeType.gold] = {
        name = "黄金", -- 名字
        value = 6, -- 价值
        icon = "💰", -- 文本小图标
    },
}

-- 建筑配置
const.BUILDING_CONFIG = {
    [const.BuildingType.base] = {
        name = "基地", -- 名字
        attack = 1, -- 攻击力
        hp = 600, -- 初始血量
        attackRange = 10, -- 攻击范围
        cost = 0, -- 建造成本
        killedAward = 0, -- 被击杀奖励
        icon = "🕍", -- 文本小图标
    },
    [const.BuildingType.tower] = {
        name = "防御塔", -- 名字
        attack = 30, -- 攻击力
        hp = 50, -- 初始血量
        attackRange = 4, -- 攻击范围
        cost = 100, -- 建造成本
        killedAward = 100, -- 被击杀奖励
        icon = "🗼", -- 文本小图标
    },
    [const.BuildingType.wall] = {
        name = "城墙", -- 名字
        attack = 0, -- 攻击力
        hp = 150, -- 初始血量
        attackRange = 0, -- 攻击范围
        cost = 200000, -- 建造成本
        killedAward = 6, -- 被击杀奖励
        icon = "🌆", -- 文本小图标
    },
}

-- 工具函数
function const.get_unit_config(unit_type)
    return const.UNIT_CONFIG[unit_type]
end

function const.get_building_config(building_type)
    return const.BUILDING_CONFIG[building_type]
end

function const.get_resource_config(resource_type)
    return const.RESOURCE_CONFIG[resource_type]
end

function const.is_resource_tilde_type(tilde_type)
    return (
        tilde_type == const.TildeType.gold or
        tilde_type == const.TildeType.energy or
        tilde_type == const.TildeType.wood or
        tilde_type == const.TildeType.stone
    )
end

return const